
package com.example.caorl.job1.conc0302.atomic;

import java.util.concurrent.atomic.AtomicInteger;

public class AtomicCount {

    /**
     * 通过"volatile"和"Unsafe提供的CAS函数实现"原子操作
     * volatile:保证可见性，修改变量对其他线程可见
     * CAS：保证原子性，CAS(CompareAndSwap)即先对比再进行交换，采用乐观锁机制，失败后不断自选重试
     * 性能：与并发压力有关，压力过大会导致自旋过多，资源消耗大
     */
    private AtomicInteger num = new AtomicInteger();

    public int add() {
        return num.getAndIncrement();
    }

    public int getNum() {
        return num.get();
    }
}
